#include "registerdialog.h"
#include "ui_registerdialog.h"

RegisterDialog::RegisterDialog(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::RegisterDialog)
{
    ui->setupUi(this);

    //设置密码隐藏
    ui->passEdit->setEchoMode(QLineEdit::Password);
    ui->confirmPassEdit->setEchoMode(QLineEdit::Password);

    //设置提示信息样式
    ui->err_tip->setProperty("state","normal");
    repolish(ui->err_tip);

    // 关联http注册信号
    connect(HttpManager::GetInstance().get(), &HttpManager::sig_reg_mod_finish, this, &RegisterDialog::slot_reg_mod_finish);

    // 初始化回调函数
    initHttpHandlers();
}

RegisterDialog::~RegisterDialog()
{
    delete ui;
}


// "((\w+)(\.|_)?(\w*)@(\w+)(\.(\w+))+)"
//(\w+)：匹配电子邮件地址的用户名部分的开始，\w 匹配任何字母数字字符，包括下划线，+ 表示匹配一次或多次。
//(\.|_)?：匹配用户名中的点（.）或下划线（_），? 表示匹配零次或一次。
//(\w*)：匹配用户名部分的结尾，* 表示匹配零次或多次。
//@：匹配电子邮件地址中的 @ 符号。
//(\w+)：匹配电子邮件地址的域名部分的开始。
//(\.(\w+))+：匹配域名中的点和随后的字母数字字符序列，+ 表示匹配一次或多次，确保域名部分包含至少一个点和随后的字符序列。
void RegisterDialog::on_getCodeButton_clicked()
{
    //验证邮箱的地址正则表达式
    auto email = ui->EmailEdit->text();
    if(email.isEmpty())
    {
        showTip(tr("邮箱地址为空"),false);
        return;
    }
    // 邮箱地址的正则表达式
    QRegularExpression regex(R"((\w+)(\.|_)?(\w*)@(\w+)(\.(\w+))+)");
    bool match = regex.match(email).hasMatch(); // 执行正则表达式匹配
    if(match)
    {
        showTip(tr("等待验证"),true);
        //发送http请求获取验证码
    }
    else
    {
        //提示邮箱不正确
        showTip(tr("邮箱地址不符合规范"),false);
    }
}

void RegisterDialog::slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err)
{
    if(err != ErrorCodes::SUCCESS)
    {
        showTip(tr("网络请求错误"),false);
        return;
    }

    // 解析 JSON 字符串,res需转化为QByteArray
    QJsonDocument jsonDoc = QJsonDocument::fromJson(res.toUtf8());
    //json解析错误
    if(jsonDoc.isNull())
    {
        showTip(tr("json解析错误"),false);
        return;
    }

    //json解析错误
    if(!jsonDoc.isObject())
    {
        showTip(tr("json解析错误"),false);
        return;
    }

    QJsonObject jsonObj = jsonDoc.object();
    //TODO 回调函数
    _handlers[id](jsonObj);
    return;
}


void RegisterDialog::showTip(QString str,bool flag)
{
    if(flag)
    {
        ui->err_tip->setProperty("state","normal");
    }
    else
    {
        ui->err_tip->setProperty("state","err");
    }
    ui->err_tip->setText(str);
    repolish(ui->err_tip);
}

void RegisterDialog::initHttpHandlers()
{
    //注册回到函数
    _handlers.insert(ReqId::ID_GET_VARIFY_CODE,[this](const QJsonObject& jsonObj){
        int error = jsonObj["error"].toInt();
        if(error != ErrorCodes::SUCCESS)
        {
            showTip(tr("参数错误"),false);
            return;
        }
        auto email = jsonObj["email"].toString();
        showTip(tr("验证码已发送到邮箱，注意查收"), true);
        qDebug()<< "email is " << email ;
    });
}
